/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pi.dao;

import java.sql.SQLIntegrityConstraintViolationException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

/**
 *
 * @author Aluno
 */
public abstract class BaseDAOImp<T, ID> implements BaseDAO<T, ID> {

    // todos filhos vao externder protected
    protected Session session;
    protected Transaction tx;

    // quem chama é o editar salvar e remover
    protected void abreSessao() {
        SessionFactory sf = FabricaSessao.abreSessao();
        session = sf.openSession();
        tx = session.beginTransaction();
    }

    protected void fechaSessao() {
        tx.commit();
        session.close();
    }

    @Override
    public T salvar(T entidade) throws SQLIntegrityConstraintViolationException, Exception {
        try {
            abreSessao();
            session.saveOrUpdate(entidade);
            fechaSessao();
        } catch (Exception e) {
            tx.rollback();
            if (session != null) {
                session.close();
            }
            System.out.println("erro ao gravar ... " + e.getMessage());
        }
        return entidade;
    }

    @Override
    public void remove(T entidade) {
        abreSessao();
        session.delete(entidade);
        fechaSessao();
    }
}